package gameobjects;

import javagame.*;

import org.newdawn.slick.*;

public class Podmornica extends Protivnik {
	
	//POLJA KLASE
	private static int startHP = 2;
	
	private Image HP_bar;//bar za prikazivanje preostale snage
	private int ronjenje;//koliko dugo podmornica da roni
	private Animation izronila;//animacija koja se prikazuje kada podmornica izroni
	private boolean vanVode;//da li je podmornica izronila
	private int brPucanja;//koliko puta da puca pre nego sto zaroni
	private boolean levoDesno;
	
	//KONSTRUKTOR
	
	public Podmornica(Igrac igrac, Igrac2 igrac2, Level nivo) {
		super(igrac, igrac2, nivo);
		this.setHP(startHP);
		this.setVrsta(tip_protivnika.PODMORNICA);
		this.ronjenje = 300;
		this.vanVode = false;
		this.brPucanja = 5;
		this.setSizeX(50);
		this.setSizeY(100);
		this.setZid(0);
		levoDesno = false;
	}

	//GET I SET METODE
	
	public Image getHP_bar() {
		return HP_bar;
	}

	public void setHP_bar(Image hPBar) {
		HP_bar = hPBar;
	}

	public int getRonjenje() {
		return ronjenje;
	}

	public void setRonjenje(int ronjenje) {
		this.ronjenje = ronjenje;
	}

	public Animation getIzronila() {
		return izronila;
	}

	public void setIzronila(Animation izronila) {
		this.izronila = izronila;
	}

	public boolean isVanVode() {
		return vanVode;
	}

	public void setVanVode(boolean vanVode) {
		this.vanVode = vanVode;
	}

	public int getBrPucanja() {
		return brPucanja;
	}

	public void setBrPucanja(int brPucanja) {
		this.brPucanja = brPucanja;
	}
	
	public boolean isLevoDesno() {
		return levoDesno;
	}

	public void setLevoDesno(boolean levoDesno) {
		this.levoDesno = levoDesno;
	}
	
	//PUCANJE
	
	//preklopljena metoda klase Protivnik
	public void fire(boolean belo) throws SlickException {
		if(vanVode) {
			this.setProtivnik(izronila);
			this.incMetakO();
			if(this.getMetakOdbrojavanje() == 0) {
				pucaj8(this.getProtivnikX() + 25, this.getProtivnikY() + 50, belo);
				brPucanja--;
				this.setMetakOdbrojavanje(10);
			}
			if(brPucanja == 0) {
				this.setProtivnik(this.getMovingDown());
				vanVode=false;
				ronjenje = 300;
				brPucanja = 5;
			}
		}
	}
	
	//KRETANJE
	
	public void move(int delta, Kolizija kolizija) {
		kreciSe(delta, kolizija);
		if(!this.getNivo().mozeFull(kolizija.getObjekatVoda(), this.getProtivnikX(), this.getProtivnikY(), this.getSizeX(), this.getSizeY())
				|| !this.getNivo().mozeProtivnik(this))
			promeniSmer(delta, kolizija);
		else promenaSmeraKrajNivoa(delta, kolizija);
	}
	
	//kretanje pod vodom
	public void roni(int delta, Kolizija kolizija) {
		if(ronjenje !=0) ronjenje--;
		else vanVode = true;
		if(!vanVode) move(delta, kolizija);
	}
	
	//promena smera kretanja
	public void promeniSmer(int delta, Kolizija kolizija) {
		if (levoDesno) {
			if(this.getSmer() == 2)	{
				this.setSmer(3);
				promeniAnimaciju();
				this.setProtivnikX(this.getProtivnikX() - delta * .1f);
			}
			else if (this.getSmer() == 3) {
				this.setSmer(2);
				promeniAnimaciju();
				this.setProtivnikX(this.getProtivnikX() + delta * .1f);
			}
		}
		else super.promeniSmer(delta, kolizija);
	}
	
	public void promenaSmeraKrajNivoa(int delta, Kolizija kolizija) {
		if(levoDesno) {
			if(this.getProtivnikX() >= 1024 - this.getSizeX()) {
				this.setSmer(3);
				promeniAnimaciju();
				this.setProtivnikX(this.getProtivnikX() - delta * .1f);
			}
			else if (this.getProtivnikX() <= 0) {
				this.setSmer(2);
				promeniAnimaciju();
				this.setProtivnikX(this.getProtivnikX() + delta * .1f);
			}
		}
		else super.promenaSmeraKrajNivoa(delta, kolizija);
	}
	
	//AI PODMORNICE
		
	public void protivnikAI(int delta, Kolizija kolizija, boolean belo) throws SlickException {
		if(this.isUbiven() == false) {
			if (!levoDesno)	algoritamKretanja(delta, kolizija);
			roni(delta, kolizija);
			fire(belo);
		}
		
	}
	
	//CRTANJE
	
	//postavljanje animacije
	public void setAnimation() throws SlickException {
		Image [] up = {new Image("res/podmornica_roni.png"), new Image("res/podmornica_roni.png")};
		Image [] down = {new Image("res/podmornica_roni.png"), new Image("res/podmornica_roni.png")};
		Image [] left = {new Image("res/podmornica_roni.png"), new Image("res/podmornica_roni.png")};
		Image [] right = {new Image("res/podmornica_roni.png"), new Image("res/podmornica_roni.png")};
		Image [] izroni = {new Image("res/podmornica.png"), new Image("res/podmornica.png")};
		this.setMovingUp(new Animation(up, this.getDuration(), true));//true se stavlja zbog autoupdate
		this.setMovingDown(new Animation(down, this.getDuration(), true));
		this.setMovingLeft(new Animation(left, this.getDuration(), true));
		this.setMovingRight(new Animation(right, this.getDuration(), true));
		this.setIzronila(new Animation(izroni, this.getDuration(), true));
		this.setProtivnik(this.getMovingDown());
	}
	
	//iscrtavanje podmornice i health bara
	public void crtaj(Graphics g) throws SlickException {
		super.crtaj(g);
		
		Color stara = g.getColor();
		g.setColor(Igrac.DARK_RED);
		g.fillRect(getProtivnikX(), getProtivnikY()-20, 50, 10);
		g.setColor(Igrac.LIME);
		g.fillRect(getProtivnikX(), getProtivnikY()-20, 50*getHP()/startHP, 10);
		g.setColor(Color.black);
		g.drawRect(getProtivnikX(), getProtivnikY()-20, 50, 10);
		g.setColor(stara);
	}
	
	public void ozivi() {
		super.ozivi();
		this.setHP(startHP);
		ronjenje = 300;
		vanVode = false;
		brPucanja = 5;
	}

}
